home *** CD-ROM | disk | FTP | other *** search
/ Power CD / Power CD ATARI-Rechner Lieben.iso / UTILITY / HPDJPOOL / HARDCPY1 / DJPRNT.S < prev   
Encoding:
Text File  |  1990-06-28  |  5.2 KB  |  131 lines

  1. ;»Hier ein kleiner Hardcopy-Treiber für die DeskJet Besitzer.
  2. ;»Für den SEKA (quick'n'dirty) Assembler, kann aber wohl  leicht an andere
  3. ;»angepasst werden. (Was umgekehrt nicht so  einfach ist) Der Treiber ist nur für
  4. ;»die hohe Auflösung,  und hält sich an folgende Felder der Druckeranpassung:
  5.  
  6. ;»Punkte/Zeile:    1280 -> 300dpi;          960 -> 150dpi
  7. ;»Qualität    :    Test -> Draft;       Maximum -> Normal
  8. ;»Drucker Port: Printer -> Centronics     Modem -> RS232
  9.  
  10. ;»die anderen Einstellungen werden ignoriert.
  11.  
  12. ; --- entlang der gestrichelten Linie ausschneiden ---
  13. ;                                        gk, 20.12.89
  14. ; Hardcopy function - for HP Deskjet+
  15. ; (older Deskjet and Laserjet should work, too)
  16.  
  17. hcflag          EQU $04EE
  18. physbase        EQU $044E
  19. hcvec           EQU $0502
  20.  
  21. start:          bra     entry           ; branch behind resident part
  22.  
  23. prtbyte:                                ; send byte in d0 to printer
  24.                 movem.l D1-D2/A0-A2,-(SP) ; save registers killed by BIOS
  25.  
  26.                 move.w  D0,-(SP)        ; push char
  27.                 move.w  device(PC),-(SP) ; and device
  28.                 move.w  #3,-(SP)        ; Bconout
  29.                 trap    #13
  30.                 addq.w  #6,SP
  31.                 movem.l (SP)+,D1-D2/A0-A2
  32.                 rts
  33.  
  34. prtstr:                                 ; print string, adress in a0; d0 is used
  35.                 move.b  (A0)+,D0        ; get byte
  36.                 beq.s   qprtstr         ; done ?
  37.                 bsr.s   prtbyte         ; no, output and continue
  38.                 bra.s   prtstr
  39.  
  40. qprtstr:        rts
  41.  
  42. init:           move.w  #-1,-(SP)
  43.                 move.w  #$21,-(SP)      ; Setprt: get config.
  44.                 trap    #14
  45.                 addq.w  #4,SP
  46.                 move.w  D0,prtset       ; save config bits
  47.                 move.w  #0,D1
  48.                 btst    #4,D0           ; setup device acc to bit 4
  49.                 beq.s   init1
  50.                 move.w  #1,D1
  51. init1:          move.w  D1,device
  52.                 move.l  #$74333030,resol ; 300 dpi
  53.                 btst    #2,D0           ; 1280 = 300, 960 = 150 dpi
  54.                 beq.s   init2
  55.                 move.l  #$74313530,resol ; 150 dpi
  56. init2:          move.b  #'1',D1
  57.                 btst    #3,D0           ; setup quality acc to bit 3
  58.                 beq.s   init3
  59.                 move.b  #'2',D1
  60. init3:          move.b  D1,qual
  61.                 rts
  62.  
  63.  
  64. dohc:                                   ;DC.W $4AFC      ; used to call debugger if active
  65.                 movem.l D0-A6,-(SP)     ; safety first
  66.                 bsr.s   init            ; setup vectors & config
  67.                 movea.l physbase.w,A4   ; get screen base
  68.                 move.w  #399,D6         ; counts lines
  69.                 lea     iniseq(PC),A0   ; print graphics init string
  70.                 bsr.s   prtstr
  71. ;
  72. doline:         lea     lininit(PC),A0  ; print line init string
  73.                 bsr.s   prtstr
  74.                 move.w  #79,D7          ; setup byte counter
  75.  
  76. linlop:         move.b  (A4),D0         ; get value, inc
  77.                 not.b   (A4)+           ; invert on screen
  78.                 bsr     prtbyte         ; and output it
  79.                 dbra    D7,linlop       ; loop on colums (bytes)
  80.                 tst.w   hcflag.w        ; test for user cancel request
  81.                 dbne    D6,doline       ; loop on lines
  82.                 lea     termseq(PC),A0  ; send termination sequence
  83.                 bsr     prtstr
  84.  
  85. qhc:            move.l  A4,D0           ; compute how many bytes
  86.                 movea.l physbase.w,A4   ; were actually transmitted
  87.                 sub.w   A4,D0
  88.                 subq.w  #1,D0
  89. invback:        not.b   (A4)+           ; and re-invert only these
  90.                 dbra    D0,invback
  91.                 movem.l (SP)+,D0-A6     ; restore registers
  92.                 rts
  93.  
  94. prtset:         DC.W 0          ; printer setup stored here
  95. device:         DC.W 0          ; where to output to
  96.  
  97.                 EVEN
  98.  
  99. iniseq:         DC.B 27,"*rB"   ; prophylactic END RASTER GRAPHICS
  100.                 DC.B 27,"*"     ; set resolution part 1
  101. resol:          DC.B "t300R"    ; part 2, MUST be on even address
  102.                 DC.B 27,"*r640S" ; set 640 pixel width
  103.                 DC.B 27,"*b0M"  ; set non-runlength mode (stay compatible
  104. ; to PCL Level III devices)
  105.                 DC.B 27,"*r"
  106. qual:           DC.B "1Q"       ; Draft (1) or letter (2) quality
  107.                 DC.B 27,"*r0A",0 ; start at leftmost position
  108. lininit:        DC.B 27,"*b80W",0 ; Transfer raster graphics
  109. termseq:        DC.B 27,"*rB"   ; end raster graphics
  110.                 DC.B $0D,$0A,0  ; line feed -> delete for adjacent graphics
  111.  
  112.                 EVEN
  113. ;
  114. ; --- resident part ends here ---
  115. ;
  116. entry:          pea     setvec(PC)      ; execute vector setup in Supervisor mode
  117.                 move.w  #38,-(SP)
  118.                 trap    #14
  119.                 addq.l  #6,SP
  120.  
  121.                 clr.w   -(SP)
  122.                 move.l  #entry-start+$0100,-(SP) ; compute resident size
  123.                 move.w  #$31,-(SP)      ; terminate'n'stay
  124.                 trap    #1
  125.  
  126. setvec:         lea     dohc(PC),A0
  127.                 move.l  A0,hcvec
  128.                 rts
  129.  
  130.                 END
  131.